//
// Created by francklinson on 2021/11/26 AT 11:10.
// May Saint Diana bless you!
//
#include <boost/bind.hpp>
#include <iostream>
#include <vector>
#include <algorithm>

void add(int i, int j) {
    std::cout << i - j << std::endl;
}

bool compare(int i, int j) {
    return i > j;
}

int main() {
    std::vector<int> v{1, 3, 2};

    std::for_each(v.begin(), v.end(), boost::bind(add, 10, _1)); // 把10绑定给add函数的第一个参数

    std::sort(v.begin(), v.end(), boost::bind(compare, _1, _2));

    auto f = boost::bind(compare, _2, _1);

    std::cout << f(2, 3) << std::endl; // compare函数是比较第一个参数大于第二个参数  而f是将两个输入参数的位置颠倒
    // bind生成一个新的函数对象new_obj  _n占位符表示：传递给new_obj的第几个参数
    // 也就是说，bind中占位符的个数代表的新生成的函数对象的参数个数
    // 而bind中，函数对象compare之后的参数个数必须和compare的参数对象相同，它们需要被传入compare


}